# -*- coding: utf-8 -*-
# @Time     : 2023/12/9 23:46
# @Author   : JustFly
# @File     : expire_id.py
# @Software : PyCharm

import re
import datetime

# 过期时间 /秒
EXPIRE_TIME = 60 * 10
# 定义存储数据的文件路径
ID_DATA_FILE = r'/root/flybot/data/id_data.txt'


def func(message):
    """
    群区分分频道 聊天室/私聊
    :param message:
    :return:
    """
    # print(message)
    if hasattr(message, 'direct_message'):
        if message.direct_message:
            return "此功能频道私信不可用 ！"
    # 聊天室
    return func_2(re.sub(r'<@!\d+>', "", message.content), message.member.nick)


def func_2(message, nickname):
    """
    房间号管理
    需求是，群聊添加房间号10分钟过期，触发关键词返回未过期房间号。
    :return: 回复的消息
    """
    if put_id(message, nickname):
        return f"房号信息发布成功 ！\n\n\n {get_all_id_msg(None)}"
    else:
        return f"房号信息发布失败 ！\n\n\n {get_all_id_msg(None)}"


def put_id(id_msg, sender):
    try:
        # 替换文件中的 '\n' 换行符
        id_msg = id_msg.replace('\n', ' ')
        # 获取当前时间并格式化为字符串
        current_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
        # 将 id 和 current_time 追加写入文件，单独占一个
        with open(ID_DATA_FILE, 'a') as f:
            f.write(f'({sender}):  {id_msg} {current_time}\n')
        return True
    except:
        return False


def get_all_id():
    # 读取文件中的所有行并存储在列表中
    lines = []
    with open(ID_DATA_FILE, 'r') as f:
        lines = f.readlines()

    # 遍历每一行，删除过期的行
    new_lines = []
    for line in lines:
        try:
            # print("原始line:", line)
            time_pattern = r'\b\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}\b'
            match = re.search(time_pattern, line)
            str_time = str(match.group())
            time = datetime.datetime.strptime(
                str_time, '%Y-%m-%d %H:%M:%S')
            # 检查是否过期（当前时间减去该行的 current_time 是否大于十分钟）
            if (datetime.datetime.now() - time).total_seconds() > EXPIRE_TIME:
                continue  # 跳过过期的行
            new_lines.append(line)  # 添加非过期的行到新列表中
        except:
            # 跳过写入的脏数据
            pass

    # 将非过期的覆盖写回文件
    with open(ID_DATA_FILE, 'w') as f:
        f.writelines(new_lines)

    # 返回所有非过期的行组成的列表
    return [str(re.sub(r'\b\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}\b', '', line)) for line in new_lines]


def id_list_to_msg(ids):
    msg = f'最近{EXPIRE_TIME / 60}分钟发布的房号：\n\n'
    for id in ids:
        msg += f"{id}\n"
    return msg


def get_all_id_msg(_):
    id_list = get_all_id()
    if len(id_list) != 0:
        return id_list_to_msg(id_list)
    # return "最近10分钟还没人发布，你来/发布一个吧 <emoji:178>"
    return "暂无数据 ！"


def test():
    print(func_2("快来玩小米枪战，房间号 AKJ589", "雷军"))


if __name__ == '__main__':
    test()
